package com.dashanchessgame.chess;

import com.dashanchessgame.tools.ImageTool;
import com.dashanchessgame.tools.WinUtils;

import java.awt.*;

/**
 * 車
 *
 * @author 37460
 */
public class ChessCar implements Chess {
    /**
     * chessCheck  检查落子是否合法
     * <p>
     * map              地图
     * nowLineNumber   当前棋子的行号
     * nowColumnNumber 当前棋子的列号
     * toLineNumber    棋子要去的行号
     * toColumnNumber  棋子要去的列号
     * isChessColor     判断棋子的攻守方  黑的返回true 红的返回false
     * 如果可以去，返回true, 否则返回false
     */
    @Override
    public boolean chessCheck(int[][] map, int nowLineNumber, int nowColumnNumber, int toLineNumber, int toColumnNumber, boolean isChessColor) {

        int istoLineNumber = Math.abs(toLineNumber - nowLineNumber);   //计算出相差的行号值
        int istoColumnNumber = Math.abs(toColumnNumber - nowColumnNumber); //计算出相差的列号值
        //判断是不是直线,不是直线直接返回false
        if ((nowLineNumber != toLineNumber  && istoColumnNumber !=0) || (nowColumnNumber!=toColumnNumber && istoLineNumber!=0)) {
            return false;
        }

        //判断棋子行走路径上有没有棋子
        int from, to;
        //横着走
        if (istoLineNumber == 0 ) {
            //判断向左
            if (nowColumnNumber < toColumnNumber) {
                //
                from = nowColumnNumber + 1;
                to = toColumnNumber;
            } else {//横着走向右
                from = toColumnNumber + 1;
                to = nowColumnNumber;
            }
            //循环遍历数组查询路径上是否由其子一直到，有的话count++
            for (int i = from; i < to; i++) {
                if (map[nowLineNumber][i] != 0) {
                    return false;  //中间有棋子，失败！！
                }
            }
        } else {
            //竖着走向上向下
            if (nowLineNumber < toLineNumber) {
                //
                from = nowLineNumber + 1;
                to = toLineNumber;
            } else {
                from = toLineNumber + 1;
                to = nowLineNumber;
            }
            //循环遍历数组查询路径上是否由其子一直到，有的话count++
            for (int i = from; i < to; i++) {
                if (map[i][nowColumnNumber] != 0) {
                    return false;  //中间有棋子，失败！！
                }
            }
        }
        //调用了判断哪方获胜的方法
        return WinUtils.win(map, toLineNumber, toColumnNumber, isChessColor);

    }


    @Override
    public int getType() {
        return 'C';
    }


    @Override
    public Image getImage(boolean isChessColor) {
        return ImageTool.loadImage(isChessColor ? "黑车.gif" : "红车.gif");
    }
}
